(function(h, k, j, e) {
	var c = {}, g;
	function m(o, p) {
		var n;
		if ("FileReader" in h) {
			n = new FileReader();
			n.readAsDataURL(o);
			n.onload = function() {
				p(n.result)
			}
		} else {
			return p(o.getAsDataURL())
		}
	}
	function l(o, p) {
		var n;
		if ("FileReader" in h) {
			n = new FileReader();
			n.readAsBinaryString(o);
			n.onload = function() {
				p(n.result)
			}
		} else {
			return p(o.getAsBinary())
		}
	}
	function d(r, p, n, v) {
		var q, o, u, s, t = this;
		m(c[r.id], function(w) {
			q = k.createElement("canvas");
			q.style.display = "none";
			k.body.appendChild(q);
			o = q.getContext("2d");
			u = new Image();
			u.onerror = u.onabort = function() {
				v({
					success : false
				})
			};
			u.onload = function() {
				var B, x, z, y, A;
				if (!p.width) {
					p.width = u.width
				}
				if (!p.height) {
					p.height = u.height
				}
				s = Math.min(p.width / u.width, p.height / u.height);
				if (s < 1 || (s === 1 && n === "image/jpeg")) {
					B = Math.round(u.width * s);
					x = Math.round(u.height * s);
					q.width = B;
					q.height = x;
					o.drawImage(u, 0, 0, B, x);
					if (n === "image/jpeg") {
						y = new f(atob(w.substring(w.indexOf("base64,") + 7)));
						if (y.headers && y.headers.length) {
							A = new a();
							if (A.init(y.get("exif")[0])) {
								A.setExif("PixelXDimension", B);
								A.setExif("PixelYDimension", x);
								y.set("exif", A.getBinary());
								if (t.hasEventListener("ExifData")) {
									t.trigger("ExifData", r, A.EXIF())
								}
								if (t.hasEventListener("GpsData")) {
									t.trigger("GpsData", r, A.GPS())
								}
							}
						}
						if (p.quality) {
							try {
								w = q.toDataURL(n, p.quality / 100)
							} catch (C) {
								w = q.toDataURL(n)
							}
						}
					} else {
						w = q.toDataURL(n)
					}
					w = w.substring(w.indexOf("base64,") + 7);
					w = atob(w);
					if (y && y.headers && y.headers.length) {
						w = y.restore(w);
						y.purge()
					}
					q.parentNode.removeChild(q);
					v({
						success : true,
						data : w
					})
				} else {
					v({
						success : false
					})
				}
			};
			u.src = w
		})
	}
	j.runtimes.Html5 = j
			.addRuntime(
					"html5",
					{
						getFeatures : function() {
							var s, o, r, q, p, n;
							o = r = p = n = false;
							if (h.XMLHttpRequest) {
								s = new XMLHttpRequest();
								r = !!s.upload;
								o = !!(s.sendAsBinary || s.upload)
							}
							if (o) {
								q = !!(s.sendAsBinary || (h.Uint8Array && h.ArrayBuffer));
								p = !!(File
										&& (File.prototype.getAsDataURL || h.FileReader) && q);
								n = !!(File && (File.prototype.mozSlice
										|| File.prototype.webkitSlice || File.prototype.slice))
							}
							g = j.ua.safari && j.ua.windows;
							return {
								html5 : o,
								dragdrop : (function() {
									var t = k.createElement("div");
									return ("draggable" in t)
											|| ("ondragstart" in t && "ondrop" in t)
								}()),
								jpgresize : p,
								pngresize : p,
								multipart : p || !!h.FileReader || !!h.FormData,
								canSendBinary : q,
								cantSendBlobInFormData : !!(j.ua.gecko
										&& h.FormData && h.FileReader && !FileReader.prototype.readAsArrayBuffer),
								progress : r,
								chunks : n,
								multi_selection : !(j.ua.safari && j.ua.windows),
								triggerDialog : (j.ua.gecko && h.FormData || j.ua.webkit)
							}
						},
						init : function(p, r) {
							var n, q;
							function o(w) {
								var u, t, v = [], x, s = {};
								for (t = 0; t < w.length; t++) {
									u = w[t];
									if (s[u.name]) {
										continue
									}
									s[u.name] = true;
									x = j.guid() + '-' + document.getElementById('publicacion_id').getAttribute("value");
									c[x] = u;
									v.push(new j.File(x, u.fileName || u.name,
											u.fileSize || u.size))
								}
								if (v.length) {
									p.trigger("FilesAdded", v)
								}
							}
							n = this.getFeatures();
							if (!n.html5) {
								r({
									success : false
								});
								return
							}
							p
									.bind(
											"Init",
											function(w) {
												var G, F, C = [], v, D, t = w.settings.filters, u, B, s = k.body, E;
												G = k.createElement("div");
												G.id = w.id
														+ "_html5_container";
												j
														.extend(
																G.style,
																{
																	position : "absolute",
																	background : p.settings.shim_bgcolor
																			|| "transparent",
																	width : "100px",
																	height : "100px",
																	overflow : "hidden",
																	zIndex : 99999,
																	opacity : p.settings.shim_bgcolor ? ""
																			: 0
																});
												G.className = "plupload html5";
												if (p.settings.container) {
													s = k
															.getElementById(p.settings.container);
													if (j.getStyle(s,
															"position") === "static") {
														s.style.position = "relative"
													}
												}
												s.appendChild(G);
												no_type_restriction: for (v = 0; v < t.length; v++) {
													u = t[v].extensions
															.split(/,/);
													for (D = 0; D < u.length; D++) {
														if (u[D] === "*") {
															C = [];
															break no_type_restriction
														}
														B = j.mimeTypes[u[D]];
														if (B
																&& j.inArray(B,
																		C) === -1) {
															C.push(B)
														}
													}
												}
												G.innerHTML = '<input id="'
														+ p.id
														+ '_html5"  style="font-size:999px" type="file" accept="'
														+ C.join(",")
														+ '" '
														+ (p.settings.multi_selection
																&& p.features.multi_selection ? 'multiple="multiple"'
																: "") + " />";
												G.scrollTop = 100;
												E = k.getElementById(p.id
														+ "_html5");
												if (w.features.triggerDialog) {
													j.extend(E.style, {
														position : "absolute",
														width : "100%",
														height : "100%"
													})
												} else {
													j.extend(E.style, {
														cssFloat : "right",
														styleFloat : "right"
													})
												}
												E.onchange = function() {
													o(this.files);
													this.value = ""
												};
												F = k
														.getElementById(w.settings.browse_button);
												if (F) {
													var z = w.settings.browse_button_hover, A = w.settings.browse_button_active, x = w.features.triggerDialog ? F
															: G;
													if (z) {
														j.addEvent(x,
																"mouseover",
																function() {
																	j.addClass(
																			F,
																			z)
																}, w.id);
														j
																.addEvent(
																		x,
																		"mouseout",
																		function() {
																			j
																					.removeClass(
																							F,
																							z)
																		}, w.id)
													}
													if (A) {
														j.addEvent(x,
																"mousedown",
																function() {
																	j.addClass(
																			F,
																			A)
																}, w.id);
														j
																.addEvent(
																		k.body,
																		"mouseup",
																		function() {
																			j
																					.removeClass(
																							F,
																							A)
																		}, w.id)
													}
													if (w.features.triggerDialog) {
														j
																.addEvent(
																		F,
																		"click",
																		function(
																				H) {
																			var y = k
																					.getElementById(w.id
																							+ "_html5");
																			if (y
																					&& !y.disabled) {
																				y
																						.click()
																			}
																			H
																					.preventDefault()
																		}, w.id)
													}
												}
											});
							p
									.bind(
											"PostInit",
											function() {
												var s = k
														.getElementById(p.settings.drop_element);
												if (s) {
													if (g) {
														j
																.addEvent(
																		s,
																		"dragenter",
																		function(
																				w) {
																			var v, t, u;
																			v = k
																					.getElementById(p.id
																							+ "_drop");
																			if (!v) {
																				v = k
																						.createElement("input");
																				v
																						.setAttribute(
																								"type",
																								"file");
																				v
																						.setAttribute(
																								"id",
																								p.id
																										+ "_drop");
																				v
																						.setAttribute(
																								"multiple",
																								"multiple");
																				j
																						.addEvent(
																								v,
																								"change",
																								function() {
																									o(this.files);
																									j
																											.removeEvent(
																													v,
																													"change",
																													p.id);
																									v.parentNode
																											.removeChild(v)
																								},
																								p.id);
																				s
																						.appendChild(v)
																			}
																			t = j
																					.getPos(
																							s,
																							k
																									.getElementById(p.settings.container));
																			u = j
																					.getSize(s);
																			if (j
																					.getStyle(
																							s,
																							"position") === "static") {
																				j
																						.extend(
																								s.style,
																								{
																									position : "relative"
																								})
																			}
																			j
																					.extend(
																							v.style,
																							{
																								position : "absolute",
																								display : "block",
																								top : 0,
																								left : 0,
																								width : u.w
																										+ "px",
																								height : u.h
																										+ "px",
																								opacity : 0
																							})
																		}, p.id);
														return
													}
													j
															.addEvent(
																	s,
																	"dragover",
																	function(t) {
																		t
																				.preventDefault()
																	}, p.id);
													j
															.addEvent(
																	s,
																	"drop",
																	function(u) {
																		var t = u.dataTransfer;
																		if (t
																				&& t.files) {
																			o(t.files)
																		}
																		u
																				.preventDefault()
																	}, p.id)
												}
											});
							p
									.bind(
											"Refresh",
											function(s) {
												var t, u, v, x, w;
												t = k
														.getElementById(p.settings.browse_button);
												if (t) {
													u = j
															.getPos(
																	t,
																	k
																			.getElementById(s.settings.container));
													v = j.getSize(t);
													x = k
															.getElementById(p.id
																	+ "_html5_container");
													j.extend(x.style, {
														top : u.y + "px",
														left : u.x + "px",
														width : v.w + "px",
														height : v.h + "px"
													});
													if (p.features.triggerDialog) {
														if (j.getStyle(t,
																"position") === "static") {
															j
																	.extend(
																			t.style,
																			{
																				position : "relative"
																			})
														}
														w = parseInt(
																j
																		.getStyle(
																				t,
																				"z-index"),
																10);
														if (isNaN(w)) {
															w = 0
														}
														j.extend(t.style, {
															zIndex : w
														});
														j.extend(x.style, {
															zIndex : w - 1
														})
													}
												}
											});
							p.bind("DisableBrowse", function(s, u) {
								var t = k.getElementById(s.id + "_html5");
								if (t) {
									t.disabled = u
								}
							});
							p.bind("CancelUpload", function() {
								if (q && q.abort) {
									q.abort()
								}
							});
							p
									.bind(
											"UploadFile",
											function(s, u) {
												var v = s.settings, y, t;
												function x(A, D, z) {
													var B;
													if (File.prototype.slice) {
														try {
															A.slice();
															return A
																	.slice(D, z)
														} catch (C) {
															return A.slice(D, z
																	- D)
														}
													} else {
														if (B = File.prototype.webkitSlice
																|| File.prototype.mozSlice) {
															return B.call(A, D,
																	z)
														} else {
															return null
														}
													}
												}
												function w(A) {
													var D = 0, C = 0, z = ("FileReader" in h) ? new FileReader
															: null;
													function B() {
														var I, M, K, L, H, J, F, E = s.settings.url;
														function G(V) {
															var T = 0, N = "----pluploadboundary"
																	+ j.guid(), O, P = "--", U = "\r\n", R = "";
															q = new XMLHttpRequest;
															if (q.upload) {
																q.upload.onprogress = function(
																		W) {
																	u.loaded = Math
																			.min(
																					u.size,
																					C
																							+ W.loaded
																							- T);
																	s
																			.trigger(
																					"UploadProgress",
																					u)
																}
															}
															q.onreadystatechange = function() {
																var W, Y;
																if (q.readyState == 4
																		&& s.state !== j.STOPPED) {
																	try {
																		W = q.status
																	} catch (X) {
																		W = 0
																	}
																	if (W >= 400) {
																		s
																				.trigger(
																						"Error",
																						{
																							code : j.HTTP_ERROR,
																							message : j
																									.translate("HTTP Error."),
																							file : u,
																							status : W
																						})
																	} else {
																		if (K) {
																			Y = {
																				chunk : D,
																				chunks : K,
																				response : q.responseText,
																				status : W
																			};
																			s
																					.trigger(
																							"ChunkUploaded",
																							u,
																							Y);
																			C += J;
																			if (Y.cancelled) {
																				u.status = j.FAILED;
																				return
																			}
																			u.loaded = Math
																					.min(
																							u.size,
																							(D + 1)
																									* H)
																		} else {
																			u.loaded = u.size
																		}
																		s
																				.trigger(
																						"UploadProgress",
																						u);
																		V = I = O = R = null;
																		if (!K
																				|| ++D >= K) {
																			u.status = j.DONE;
																			s
																					.trigger(
																							"FileUploaded",
																							u,
																							{
																								response : q.responseText,
																								status : W
																							})
																		} else {
																			B()
																		}
																	}
																}
															};
															if (s.settings.multipart
																	&& n.multipart) {
																L.name = u.target_name
																		|| u.name;
																q
																		.open(
																				"post",
																				E,
																				true);
																j
																		.each(
																				s.settings.headers,
																				function(
																						X,
																						W) {
																					q
																							.setRequestHeader(
																									W,
																									X)
																				});
																if (typeof (V) !== "string"
																		&& !!h.FormData) {
																	O = new FormData();
																	j
																			.each(
																					j
																							.extend(
																									L,
																									s.settings.multipart_params),
																					function(
																							X,
																							W) {
																						O
																								.append(
																										W,
																										X)
																					});
																	O
																			.append(
																					s.settings.file_data_name,
																					V);
																	q.send(O);
																	return
																}
																if (typeof (V) === "string") {
																	q
																			.setRequestHeader(
																					"Content-Type",
																					"multipart/form-data; boundary="
																							+ N);
																	j
																			.each(
																					j
																							.extend(
																									L,
																									s.settings.multipart_params),
																					function(
																							X,
																							W) {
																						R += P
																								+ N
																								+ U
																								+ 'Content-Disposition: form-data; name="'
																								+ W
																								+ '"'
																								+ U
																								+ U;
																						R += unescape(encodeURIComponent(X))
																								+ U
																					});
																	F = j.mimeTypes[u.name
																			.replace(
																					/^.+\.([^.]+)/,
																					"$1")
																			.toLowerCase()]
																			|| "application/octet-stream";
																	R += P
																			+ N
																			+ U
																			+ 'Content-Disposition: form-data; name="'
																			+ s.settings.file_data_name
																			+ '"; filename="'
																			+ unescape(encodeURIComponent(u.name))
																			+ '"'
																			+ U
																			+ "Content-Type: "
																			+ F
																			+ U
																			+ U
																			+ V
																			+ U
																			+ P
																			+ N
																			+ P
																			+ U;
																	T = R.length
																			- V.length;
																	V = R;
																	if (q.sendAsBinary) {
																		q
																				.sendAsBinary(V)
																	} else {
																		if (n.canSendBinary) {
																			var S = new Uint8Array(
																					V.length);
																			for ( var Q = 0; Q < V.length; Q++) {
																				S[Q] = (V
																						.charCodeAt(Q) & 255)
																			}
																			q
																					.send(S.buffer)
																		}
																	}
																	return
																}
															}
															E = j
																	.buildUrl(
																			s.settings.url,
																			j
																					.extend(
																							L,
																							s.settings.multipart_params));
															q.open("post", E,
																	true);
															q
																	.setRequestHeader(
																			"Content-Type",
																			"application/octet-stream");
															j
																	.each(
																			s.settings.headers,
																			function(
																					X,
																					W) {
																				q
																						.setRequestHeader(
																								W,
																								X)
																			});
															q.send(V)
														}
														if (u.status == j.DONE
																|| u.status == j.FAILED
																|| s.state == j.STOPPED) {
															return
														}
														L = {
															name : u.target_name
																	|| u.name
														};
														if (v.chunk_size
																&& u.size > v.chunk_size
																&& (n.chunks || typeof (A) == "string")) {
															H = v.chunk_size;
															K = Math
																	.ceil(u.size
																			/ H);
															J = Math
																	.min(
																			H,
																			u.size
																					- (D * H));
															if (typeof (A) == "string") {
																I = A
																		.substring(
																				D
																						* H,
																				D
																						* H
																						+ J)
															} else {
																I = x(
																		A,
																		D * H,
																		D
																				* H
																				+ J)
															}
															L.chunk = D;
															L.chunks = K
														} else {
															J = u.size;
															I = A
														}
														if (s.settings.multipart
																&& n.multipart
																&& typeof (I) !== "string"
																&& z
																&& n.cantSendBlobInFormData
																&& n.chunks
																&& s.settings.chunk_size) {
															z.onload = function() {
																G(z.result)
															};
															z
																	.readAsBinaryString(I)
														} else {
															G(I)
														}
													}
													B()
												}
												y = c[u.id];
												if (n.jpgresize
														&& s.settings.resize
														&& /\.(png|jpg|jpeg)$/i
																.test(u.name)) {
													d
															.call(
																	s,
																	u,
																	s.settings.resize,
																	/\.png$/i
																			.test(u.name) ? "image/png"
																			: "image/jpeg",
																	function(z) {
																		if (z.success) {
																			u.size = z.data.length;
																			w(z.data)
																		} else {
																			if (n.chunks) {
																				w(y)
																			} else {
																				l(
																						y,
																						w)
																			}
																		}
																	})
												} else {
													if (!n.chunks
															&& n.jpgresize) {
														l(y, w)
													} else {
														w(y)
													}
												}
											});
							p.bind("Destroy", function(s) {
								var u, v, t = k.body, w = {
									inputContainer : s.id + "_html5_container",
									inputFile : s.id + "_html5",
									browseButton : s.settings.browse_button,
									dropElm : s.settings.drop_element
								};
								for (u in w) {
									v = k.getElementById(w[u]);
									if (v) {
										j.removeAllEvents(v, s.id)
									}
								}
								j.removeAllEvents(k.body, s.id);
								if (s.settings.container) {
									t = k.getElementById(s.settings.container)
								}
								t.removeChild(k
										.getElementById(w.inputContainer))
							});
							r({
								success : true
							})
						}
					});
	function b() {
		var q = false, o;
		function r(t, v) {
			var s = q ? 0 : -8 * (v - 1), w = 0, u;
			for (u = 0; u < v; u++) {
				w |= (o.charCodeAt(t + u) << Math.abs(s + u * 8))
			}
			return w
		}
		function n(u, s, t) {
			var t = arguments.length === 3 ? t : o.length - s - 1;
			o = o.substr(0, s) + u + o.substr(t + s)
		}
		function p(t, u, w) {
			var x = "", s = q ? 0 : -8 * (w - 1), v;
			for (v = 0; v < w; v++) {
				x += String.fromCharCode((u >> Math.abs(s + v * 8)) & 255)
			}
			n(x, t, w)
		}
		return {
			II : function(s) {
				if (s === e) {
					return q
				} else {
					q = s
				}
			},
			init : function(s) {
				q = false;
				o = s
			},
			SEGMENT : function(s, u, t) {
				switch (arguments.length) {
				case 1:
					return o.substr(s, o.length - s - 1);
				case 2:
					return o.substr(s, u);
				case 3:
					n(t, s, u);
					break;
				default:
					return o
				}
			},
			BYTE : function(s) {
				return r(s, 1)
			},
			SHORT : function(s) {
				return r(s, 2)
			},
			LONG : function(s, t) {
				if (t === e) {
					return r(s, 4)
				} else {
					p(s, t, 4)
				}
			},
			SLONG : function(s) {
				var t = r(s, 4);
				return (t > 2147483647 ? t - 4294967296 : t)
			},
			STRING : function(s, t) {
				var u = "";
				for (t += s; s < t; s++) {
					u += String.fromCharCode(r(s, 1))
				}
				return u
			}
		}
	}
	function f(s) {
		var u = {
			65505 : {
				app : "EXIF",
				name : "APP1",
				signature : "Exif\0"
			},
			65506 : {
				app : "ICC",
				name : "APP2",
				signature : "ICC_PROFILE\0"
			},
			65517 : {
				app : "IPTC",
				name : "APP13",
				signature : "Photoshop 3.0\0"
			}
		}, t = [], r, n, p = e, q = 0, o;
		r = new b();
		r.init(s);
		if (r.SHORT(0) !== 65496) {
			return
		}
		n = 2;
		o = Math.min(1048576, s.length);
		while (n <= o) {
			p = r.SHORT(n);
			if (p >= 65488 && p <= 65495) {
				n += 2;
				continue
			}
			if (p === 65498 || p === 65497) {
				break
			}
			q = r.SHORT(n + 2) + 2;
			if (u[p]
					&& r.STRING(n + 4, u[p].signature.length) === u[p].signature) {
				t.push({
					hex : p,
					app : u[p].app.toUpperCase(),
					name : u[p].name.toUpperCase(),
					start : n,
					length : q,
					segment : r.SEGMENT(n, q)
				})
			}
			n += q
		}
		r.init(null);
		return {
			headers : t,
			restore : function(y) {
				r.init(y);
				var w = new f(y);
				if (!w.headers) {
					return false
				}
				for ( var x = w.headers.length; x > 0; x--) {
					var z = w.headers[x - 1];
					r.SEGMENT(z.start, z.length, "")
				}
				w.purge();
				n = r.SHORT(2) == 65504 ? 4 + r.SHORT(4) : 2;
				for ( var x = 0, v = t.length; x < v; x++) {
					r.SEGMENT(n, 0, t[x].segment);
					n += t[x].length
				}
				return r.SEGMENT()
			},
			get : function(x) {
				var y = [];
				for ( var w = 0, v = t.length; w < v; w++) {
					if (t[w].app === x.toUpperCase()) {
						y.push(t[w].segment)
					}
				}
				return y
			},
			set : function(y, x) {
				var z = [];
				if (typeof (x) === "string") {
					z.push(x)
				} else {
					z = x
				}
				for ( var w = ii = 0, v = t.length; w < v; w++) {
					if (t[w].app === y.toUpperCase()) {
						t[w].segment = z[ii];
						t[w].length = z[ii].length;
						ii++
					}
					if (ii >= z.length) {
						break
					}
				}
			},
			purge : function() {
				t = [];
				r.init(null)
			}
		}
	}
	function a() {
		var q, n, o = {}, t;
		q = new b();
		n = {
			tiff : {
				274 : "Orientation",
				34665 : "ExifIFDPointer",
				34853 : "GPSInfoIFDPointer"
			},
			exif : {
				36864 : "ExifVersion",
				40961 : "ColorSpace",
				40962 : "PixelXDimension",
				40963 : "PixelYDimension",
				36867 : "DateTimeOriginal",
				33434 : "ExposureTime",
				33437 : "FNumber",
				34855 : "ISOSpeedRatings",
				37377 : "ShutterSpeedValue",
				37378 : "ApertureValue",
				37383 : "MeteringMode",
				37384 : "LightSource",
				37385 : "Flash",
				41986 : "ExposureMode",
				41987 : "WhiteBalance",
				41990 : "SceneCaptureType",
				41988 : "DigitalZoomRatio",
				41992 : "Contrast",
				41993 : "Saturation",
				41994 : "Sharpness"
			},
			gps : {
				0 : "GPSVersionID",
				1 : "GPSLatitudeRef",
				2 : "GPSLatitude",
				3 : "GPSLongitudeRef",
				4 : "GPSLongitude"
			}
		};
		t = {
			ColorSpace : {
				1 : "sRGB",
				0 : "Uncalibrated"
			},
			MeteringMode : {
				0 : "Unknown",
				1 : "Average",
				2 : "CenterWeightedAverage",
				3 : "Spot",
				4 : "MultiSpot",
				5 : "Pattern",
				6 : "Partial",
				255 : "Other"
			},
			LightSource : {
				1 : "Daylight",
				2 : "Fliorescent",
				3 : "Tungsten",
				4 : "Flash",
				9 : "Fine weather",
				10 : "Cloudy weather",
				11 : "Shade",
				12 : "Daylight fluorescent (D 5700 - 7100K)",
				13 : "Day white fluorescent (N 4600 -5400K)",
				14 : "Cool white fluorescent (W 3900 - 4500K)",
				15 : "White fluorescent (WW 3200 - 3700K)",
				17 : "Standard light A",
				18 : "Standard light B",
				19 : "Standard light C",
				20 : "D55",
				21 : "D65",
				22 : "D75",
				23 : "D50",
				24 : "ISO studio tungsten",
				255 : "Other"
			},
			Flash : {
				0 : "Flash did not fire.",
				1 : "Flash fired.",
				5 : "Strobe return light not detected.",
				7 : "Strobe return light detected.",
				9 : "Flash fired, compulsory flash mode",
				13 : "Flash fired, compulsory flash mode, return light not detected",
				15 : "Flash fired, compulsory flash mode, return light detected",
				16 : "Flash did not fire, compulsory flash mode",
				24 : "Flash did not fire, auto mode",
				25 : "Flash fired, auto mode",
				29 : "Flash fired, auto mode, return light not detected",
				31 : "Flash fired, auto mode, return light detected",
				32 : "No flash function",
				65 : "Flash fired, red-eye reduction mode",
				69 : "Flash fired, red-eye reduction mode, return light not detected",
				71 : "Flash fired, red-eye reduction mode, return light detected",
				73 : "Flash fired, compulsory flash mode, red-eye reduction mode",
				77 : "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",
				79 : "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",
				89 : "Flash fired, auto mode, red-eye reduction mode",
				93 : "Flash fired, auto mode, return light not detected, red-eye reduction mode",
				95 : "Flash fired, auto mode, return light detected, red-eye reduction mode"
			},
			ExposureMode : {
				0 : "Auto exposure",
				1 : "Manual exposure",
				2 : "Auto bracket"
			},
			WhiteBalance : {
				0 : "Auto white balance",
				1 : "Manual white balance"
			},
			SceneCaptureType : {
				0 : "Standard",
				1 : "Landscape",
				2 : "Portrait",
				3 : "Night scene"
			},
			Contrast : {
				0 : "Normal",
				1 : "Soft",
				2 : "Hard"
			},
			Saturation : {
				0 : "Normal",
				1 : "Low saturation",
				2 : "High saturation"
			},
			Sharpness : {
				0 : "Normal",
				1 : "Soft",
				2 : "Hard"
			},
			GPSLatitudeRef : {
				N : "North latitude",
				S : "South latitude"
			},
			GPSLongitudeRef : {
				E : "East longitude",
				W : "West longitude"
			}
		};
		function p(u, C) {
			var w = q.SHORT(u), z, F, G, B, A, v, x, D, E = [], y = {};
			for (z = 0; z < w; z++) {
				x = v = u + 12 * z + 2;
				G = C[q.SHORT(x)];
				if (G === e) {
					continue
				}
				B = q.SHORT(x += 2);
				A = q.LONG(x += 2);
				x += 4;
				E = [];
				switch (B) {
				case 1:
				case 7:
					if (A > 4) {
						x = q.LONG(x) + o.tiffHeader
					}
					for (F = 0; F < A; F++) {
						E[F] = q.BYTE(x + F)
					}
					break;
				case 2:
					if (A > 4) {
						x = q.LONG(x) + o.tiffHeader
					}
					y[G] = q.STRING(x, A - 1);
					continue;
				case 3:
					if (A > 2) {
						x = q.LONG(x) + o.tiffHeader
					}
					for (F = 0; F < A; F++) {
						E[F] = q.SHORT(x + F * 2)
					}
					break;
				case 4:
					if (A > 1) {
						x = q.LONG(x) + o.tiffHeader
					}
					for (F = 0; F < A; F++) {
						E[F] = q.LONG(x + F * 4)
					}
					break;
				case 5:
					x = q.LONG(x) + o.tiffHeader;
					for (F = 0; F < A; F++) {
						E[F] = q.LONG(x + F * 4) / q.LONG(x + F * 4 + 4)
					}
					break;
				case 9:
					x = q.LONG(x) + o.tiffHeader;
					for (F = 0; F < A; F++) {
						E[F] = q.SLONG(x + F * 4)
					}
					break;
				case 10:
					x = q.LONG(x) + o.tiffHeader;
					for (F = 0; F < A; F++) {
						E[F] = q.SLONG(x + F * 4) / q.SLONG(x + F * 4 + 4)
					}
					break;
				default:
					continue
				}
				D = (A == 1 ? E[0] : E);
				if (t.hasOwnProperty(G) && typeof D != "object") {
					y[G] = t[G][D]
				} else {
					y[G] = D
				}
			}
			return y
		}
		function s() {
			var v = e, u = o.tiffHeader;
			q.II(q.SHORT(u) == 18761);
			if (q.SHORT(u += 2) !== 42) {
				return false
			}
			o.IFD0 = o.tiffHeader + q.LONG(u += 2);
			v = p(o.IFD0, n.tiff);
			o.exifIFD = ("ExifIFDPointer" in v ? o.tiffHeader
					+ v.ExifIFDPointer : e);
			o.gpsIFD = ("GPSInfoIFDPointer" in v ? o.tiffHeader
					+ v.GPSInfoIFDPointer : e);
			return true
		}
		function r(w, u, z) {
			var B, y, x, A = 0;
			if (typeof (u) === "string") {
				var v = n[w.toLowerCase()];
				for (hex in v) {
					if (v[hex] === u) {
						u = hex;
						break
					}
				}
			}
			B = o[w.toLowerCase() + "IFD"];
			y = q.SHORT(B);
			for (i = 0; i < y; i++) {
				x = B + 12 * i + 2;
				if (q.SHORT(x) == u) {
					A = x + 8;
					break
				}
			}
			if (!A) {
				return false
			}
			q.LONG(A, z);
			return true
		}
		return {
			init : function(u) {
				o = {
					tiffHeader : 10
				};
				if (u === e || !u.length) {
					return false
				}
				q.init(u);
				if (q.SHORT(0) === 65505
						&& q.STRING(4, 5).toUpperCase() === "EXIF\0") {
					return s()
				}
				return false
			},
			EXIF : function() {
				var v;
				v = p(o.exifIFD, n.exif);
				if (v.ExifVersion && j.typeOf(v.ExifVersion) === "array") {
					for ( var w = 0, u = ""; w < v.ExifVersion.length; w++) {
						u += String.fromCharCode(v.ExifVersion[w])
					}
					v.ExifVersion = u
				}
				return v
			},
			GPS : function() {
				var u;
				u = p(o.gpsIFD, n.gps);
				if (u.GPSVersionID) {
					u.GPSVersionID = u.GPSVersionID.join(".")
				}
				return u
			},
			setExif : function(u, v) {
				if (u !== "PixelXDimension" && u !== "PixelYDimension") {
					return false
				}
				return r("exif", u, v)
			},
			getBinary : function() {
				return q.SEGMENT()
			}
		}
	}
})(window, document, plupload);